home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1998 August / PC Plus SuperCD 50b Issue 142 (CD142b) (August 1998).iso / handson / Java / sc20form.jar / com / supercede / forms / SuperCedeConnectionDescriptor.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-01-28  |  8.4 KB  |  392 lines

  1. package com.supercede.forms;
  2.  
  3. import java.awt.Component;
  4. import java.awt.MenuComponent;
  5. import java.io.Serializable;
  6. import java.lang.reflect.InvocationTargetException;
  7. import java.lang.reflect.Method;
  8. import java.util.TooManyListenersException;
  9.  
  10. public class SuperCedeConnectionDescriptor implements Serializable {
  11.    protected String sourceClassName;
  12.    protected String targetClassName;
  13.    protected String connectorName;
  14.    protected boolean isSimpleInnerClass;
  15.    protected boolean sourceIsForm;
  16.    protected Object sourceInstance;
  17.    protected String eventFiredName;
  18.    protected String addListenerName;
  19.    protected String eventListenerName;
  20.    protected boolean targetIsForm;
  21.    protected Object targetInstance;
  22.    protected boolean fixedHandlerName;
  23.    protected String eventHandlerName;
  24.    private static final long serialVersionUID = 1013082004010516616L;
  25.    private static final int _version = 1;
  26.    private int version = 1;
  27.  
  28.    public static String makeEventHandlerName(SuperCedeConnectionDescriptor var0) throws IllegalArgumentException {
  29.       return makeEventHandlerName(var0.sourceIsForm, var0.sourceInstance, var0.eventFiredName);
  30.    }
  31.  
  32.    public static String makeEventHandlerName(boolean var0, Object var1, String var2) throws IllegalArgumentException {
  33.       StringBuffer var3 = new StringBuffer();
  34.       if (var1 instanceof String) {
  35.          var3.append((String)var1);
  36.          var0 = true;
  37.       } else if (var1 instanceof Component) {
  38.          var3.append(((Component)var1).getName());
  39.       } else {
  40.          if (!(var1 instanceof MenuComponent)) {
  41.             throw new IllegalArgumentException("INTERNAL ERROR: Source of event must be a bean that is a [Menu]Component or the Form" + var1.getClass().getName());
  42.          }
  43.  
  44.          var3.append(((MenuComponent)var1).getName());
  45.       }
  46.  
  47.       if (var0) {
  48.          var3.setCharAt(0, Character.toLowerCase(var3.charAt(0)));
  49.       }
  50.  
  51.       int var4 = var3.length();
  52.       var3.append(var2);
  53.       var3.setCharAt(var4, Character.toUpperCase(var3.charAt(var4)));
  54.       return var3.toString();
  55.    }
  56.  
  57.    public static String makeEventHandlerName(String var0, Object var1, String var2) throws IllegalArgumentException {
  58.       StringBuffer var3 = new StringBuffer();
  59.       if (var1 instanceof String) {
  60.          String var4 = (String)var1;
  61.          var3.append(var4);
  62.          if (var4.equals(var0)) {
  63.             var3.setCharAt(0, Character.toLowerCase(var3.charAt(0)));
  64.          }
  65.       } else if (var1 instanceof Component) {
  66.          String var5 = ((Component)var1).getName();
  67.          var3.append(var5);
  68.          if (var5.equals(var0)) {
  69.             var3.setCharAt(0, Character.toLowerCase(var3.charAt(0)));
  70.          }
  71.       } else {
  72.          if (!(var1 instanceof MenuComponent)) {
  73.             throw new IllegalArgumentException("INTERNAL ERROR: Source of event must be a bean that is a [Menu]Component or the Form" + var1.getClass().getName());
  74.          }
  75.  
  76.          var3.append(((MenuComponent)var1).getName());
  77.       }
  78.  
  79.       int var6 = var3.length();
  80.       var3.append(var2);
  81.       var3.setCharAt(var6, Character.toUpperCase(var3.charAt(var6)));
  82.       return var3.toString();
  83.    }
  84.  
  85.    protected SuperCedeConnectionDescriptor() {
  86.    }
  87.  
  88.    public SuperCedeConnectionDescriptor(String var1, String var2, String var3, Object var4, String var5, String var6, String var7, Object var8, String var9) {
  89.       this.initialize(var1, var2, var3, var4, var5, var6, var7, var8, var9);
  90.    }
  91.  
  92.    protected void initialize(String var1, String var2, String var3, Object var4, String var5, String var6, String var7, Object var8, String var9) {
  93.       if (var3.startsWith(var1)) {
  94.          this.connectorName = var3;
  95.       } else {
  96.          this.connectorName = var1 + Character.toUpperCase(var3.charAt(0)) + var3.substring(1);
  97.       }
  98.  
  99.       this.sourceIsForm = var4 == null;
  100.       this.targetIsForm = var8 == null;
  101.       if (this.sourceIsForm) {
  102.          this.sourceInstance = var1;
  103.          this.sourceClassName = var2;
  104.       } else {
  105.          this.sourceInstance = var4;
  106.          this.sourceClassName = var4.getClass().getName();
  107.       }
  108.  
  109.       if (this.targetIsForm) {
  110.          this.targetInstance = var1;
  111.          this.targetClassName = var1;
  112.       } else {
  113.          this.targetInstance = var8;
  114.          this.targetClassName = var8.getClass().getName();
  115.       }
  116.  
  117.       this.eventListenerName = var7;
  118.       this.addListenerName = var6;
  119.       this.eventFiredName = var5;
  120.       if (var9 == null) {
  121.          this.fixedHandlerName = false;
  122.          this.updateEventHandlerName();
  123.       } else {
  124.          this.fixedHandlerName = true;
  125.          this.eventHandlerName = var9;
  126.       }
  127.    }
  128.  
  129.    protected SuperCedeConnectionDescriptor(SuperCedeConnectionDescriptor var1) {
  130.       this.sourceClassName = var1.sourceClassName;
  131.       this.targetClassName = var1.targetClassName;
  132.       this.connectorName = var1.connectorName;
  133.       this.isSimpleInnerClass = var1.isSimpleInnerClass;
  134.       this.sourceIsForm = var1.sourceIsForm;
  135.       this.sourceInstance = var1.sourceInstance;
  136.       this.eventFiredName = var1.eventFiredName;
  137.       this.addListenerName = var1.addListenerName;
  138.       this.eventListenerName = var1.eventListenerName;
  139.       this.targetIsForm = var1.targetIsForm;
  140.       this.targetInstance = var1.targetInstance;
  141.       this.fixedHandlerName = var1.fixedHandlerName;
  142.       this.eventHandlerName = var1.eventHandlerName;
  143.       this.version = var1.version;
  144.    }
  145.  
  146.    private void updateEventHandlerName() {
  147.       if (!this.fixedHandlerName) {
  148.          this.eventHandlerName = makeEventHandlerName(this);
  149.       }
  150.  
  151.    }
  152.  
  153.    public void classNameChanged(String var1) {
  154.       if (this.sourceIsForm) {
  155.          this.sourceInstance = var1;
  156.       }
  157.  
  158.       String var2 = this.targetClassName;
  159.       this.targetClassName = var1;
  160.       this.targetInstance = var1;
  161.       int var3 = this.connectorName.indexOf(var2);
  162.       if (var3 != -1) {
  163.          if (var3 != 0) {
  164.             StringBuffer var4 = new StringBuffer(this.connectorName.length() + var1.length() - var2.length());
  165.             var4.append(this.connectorName.substring(0, var3));
  166.             var4.append(var1);
  167.             var4.append(this.connectorName.substring(var3 + var2.length()));
  168.             this.connectorName = var4.toString();
  169.          } else {
  170.             this.connectorName = var1 + this.connectorName.substring(var3 + var2.length());
  171.          }
  172.       }
  173.  
  174.       this.updateEventHandlerName();
  175.    }
  176.  
  177.    public void baseClassNameChanged(String var1) {
  178.       if (this.sourceIsForm) {
  179.          this.sourceClassName = var1;
  180.       }
  181.  
  182.    }
  183.  
  184.    public String beanNameChanged(Component var1) {
  185.       if (this.sourceInstance != var1) {
  186.          return null;
  187.       } else if (this.fixedHandlerName) {
  188.          return null;
  189.       } else {
  190.          String var2 = this.eventHandlerName;
  191.          this.updateEventHandlerName();
  192.          return var2;
  193.       }
  194.    }
  195.  
  196.    public String getConnectorName() {
  197.       return this.connectorName;
  198.    }
  199.  
  200.    public void setConnectorName(String var1) {
  201.       this.connectorName = var1;
  202.    }
  203.  
  204.    public String getTargetClassName() {
  205.       return this.targetClassName;
  206.    }
  207.  
  208.    public String getSourceClassName() {
  209.       return this.sourceClassName;
  210.    }
  211.  
  212.    public String getEventHandlerName() {
  213.       return this.eventHandlerName;
  214.    }
  215.  
  216.    public void runTimeInit(Object var1) {
  217.       if (!this.targetIsForm) {
  218.          throw new IllegalStateException("The target of an event connection is not the form itself");
  219.       } else {
  220.          if (this.targetIsForm) {
  221.             this.targetInstance = var1;
  222.             this.targetClassName = var1.getClass().getName();
  223.          }
  224.  
  225.          if (this.sourceIsForm) {
  226.             this.sourceInstance = var1;
  227.             this.sourceClassName = var1.getClass().getName();
  228.          }
  229.  
  230.       }
  231.    }
  232.  
  233.    public Object getTargetInstance() {
  234.       return this.targetInstance;
  235.    }
  236.  
  237.    public Object getSourceInstance() {
  238.       return this.sourceInstance;
  239.    }
  240.  
  241.    public String getAddListenerName() {
  242.       return this.addListenerName;
  243.    }
  244.  
  245.    public String getEventListenerName() {
  246.       return this.eventListenerName;
  247.    }
  248.  
  249.    public Method getAddListenerMethod() throws SuperCedeInvalidStateException {
  250.       Object var1 = null;
  251.  
  252.       try {
  253.          var7 = new Class[]{Class.forName(this.eventListenerName)};
  254.       } catch (ClassNotFoundException var6) {
  255.          throw new SuperCedeInvalidStateException(var6, "Can't find Event Source's (" + this.sourceClassName + ") Listener interface " + this.addListenerName);
  256.       }
  257.  
  258.       Object var2 = null;
  259.  
  260.       try {
  261.          Method var8 = this.sourceInstance.getClass().getMethod(this.addListenerName, var7);
  262.          return var8;
  263.       } catch (NoSuchMethodException var4) {
  264.          throw new SuperCedeInvalidStateException(var4, "Can't find Event Source's (" + this.sourceClassName + ") addListener method " + this.addListenerName);
  265.       } catch (SecurityException var5) {
  266.          throw new SuperCedeInvalidStateException(var5, "Can't access Event Source's (" + this.sourceClassName + ") addListener method " + this.addListenerName);
  267.       }
  268.    }
  269.  
  270.    public void wireItUp(SuperCedeConnector var1) throws SuperCedeInvalidStateException {
  271.       try {
  272.          this.addAsListener(var1);
  273.       } catch (Throwable var3) {
  274.          if (var3 instanceof SuperCedeInvalidStateException) {
  275.             throw (SuperCedeInvalidStateException)var3;
  276.          } else {
  277.             throw new SuperCedeInvalidStateException(var3, "Problem initializing (generated) connector class: " + this.connectorName);
  278.          }
  279.       }
  280.    }
  281.  
  282.    void addAsListener(Object var1) throws SuperCedeInvalidStateException {
  283.       Method var2 = this.getAddListenerMethod();
  284.       Object[] var3 = new Object[]{var1};
  285.  
  286.       try {
  287.          var2.invoke(this.sourceInstance, var3);
  288.       } catch (InvocationTargetException var6) {
  289.          Throwable var5 = var6.getTargetException();
  290.          if (var5 instanceof TooManyListenersException) {
  291.             throw new SuperCedeInvalidStateException(var6, "Couldn't make an event connection between " + this.sourceClassName + " and " + this.connectorName);
  292.          } else {
  293.             throw new SuperCedeInvalidStateException(var6, "Unexpected exception thrown by " + this.addListenerName + " on Event source " + this.sourceClassName);
  294.          }
  295.       } catch (Throwable var7) {
  296.          throw new SuperCedeInvalidStateException(var7, "Problem invoking " + this.addListenerName + " on Event source " + this.sourceClassName);
  297.       }
  298.    }
  299.  
  300.    public String getSourceInstanceName() {
  301.       if (this.sourceIsForm) {
  302.          return (String)this.sourceInstance;
  303.       } else if (this.sourceInstance instanceof Component) {
  304.          return ((Component)this.sourceInstance).getName();
  305.       } else {
  306.          return this.sourceInstance instanceof MenuComponent ? ((MenuComponent)this.sourceInstance).getName() : this.sourceInstance.getClass().getName();
  307.       }
  308.    }
  309.  
  310.    public String getTargetInstanceName() {
  311.       if (this.targetIsForm) {
  312.          return (String)this.targetInstance;
  313.       } else if (this.targetInstance instanceof Component) {
  314.          return ((Component)this.targetInstance).getName();
  315.       } else {
  316.          return this.targetInstance instanceof MenuComponent ? ((MenuComponent)this.targetInstance).getName() : this.targetInstance.getClass().getName();
  317.       }
  318.    }
  319.  
  320.    public String toString() {
  321.       String var1 = this.getSourceInstanceName();
  322.       String var2 = this.getTargetInstanceName();
  323.       StringBuffer var3 = new StringBuffer(this.connectorName.length() + ": from ".length() + var1.length() + this.eventFiredName.length() + " to ".length() + var2.length() + this.eventHandlerName.length() + 2 + 1);
  324.       var3.append(this.connectorName);
  325.       var3.append(": from ");
  326.       var3.append(var1);
  327.       var3.append('.');
  328.       var3.append(this.eventFiredName);
  329.       var3.append(" to ");
  330.       var3.append(var2);
  331.       var3.append('.');
  332.       var3.append(this.eventHandlerName);
  333.       return var3.toString();
  334.    }
  335.  
  336.    public String toInvocation() {
  337.       String var3 = null;
  338.       String var4 = null;
  339.       String var1;
  340.       String var2;
  341.       if (this.sourceIsForm) {
  342.          var1 = (String)this.sourceInstance;
  343.          var2 = this.sourceClassName;
  344.          var3 = "null";
  345.          if (this.targetIsForm) {
  346.             var4 = "null";
  347.          }
  348.       } else if (this.targetIsForm) {
  349.          var1 = (String)this.targetInstance;
  350.          var2 = "";
  351.          var4 = "null";
  352.       } else {
  353.          int var5 = this.connectorName.indexOf("EventConnector");
  354.          var1 = this.connectorName.substring(0, var5);
  355.          var2 = "";
  356.       }
  357.  
  358.       if (var3 == null) {
  359.          var3 = this.getSourceInstanceName();
  360.       }
  361.  
  362.       if (var4 == null) {
  363.          var4 = this.getTargetInstanceName();
  364.       }
  365.  
  366.       String var7 = "SuperCedeConnectionDescriptor";
  367.       StringBuffer var6 = new StringBuffer(25 + var7.length() + var1.length() + var2.length() + this.connectorName.length() + var3.length() + this.eventFiredName.length() + this.addListenerName.length() + this.eventListenerName.length() + var4.length() + this.eventHandlerName.length() + 10 + 1 + 8);
  368.       var6.append("new ");
  369.       var6.append(var7);
  370.       var6.append("(\"");
  371.       var6.append(var1);
  372.       var6.append("\", \"");
  373.       var6.append(var2);
  374.       var6.append("\", \"");
  375.       var6.append(this.connectorName);
  376.       var6.append("\", ");
  377.       var6.append(var3);
  378.       var6.append(", \"");
  379.       var6.append(this.eventFiredName);
  380.       var6.append("\", \"");
  381.       var6.append(this.addListenerName);
  382.       var6.append("\", \"");
  383.       var6.append(this.eventListenerName);
  384.       var6.append("\", ");
  385.       var6.append(var4);
  386.       var6.append(", \"");
  387.       var6.append(this.eventHandlerName);
  388.       var6.append("\");");
  389.       return var6.toString();
  390.    }
  391. }
  392.